package com.hjh.core.framework

import android.content.Context
import com.elvishew.xlog.XLog
import java.io.PrintWriter
import java.io.StringWriter
import kotlin.system.exitProcess

/**
 * @author： hjh
 * @createDate： 2025/6/19 14:01
 * @description： 未捕获异常收集
 * @qq： 3472903821
 * @version: 1.0
 */
class CrashHandler(context: Context) : Thread.UncaughtExceptionHandler {

    // 系统默认的UncaughtException处理类
    private val defaultHandler: Thread.UncaughtExceptionHandler? =
        Thread.getDefaultUncaughtExceptionHandler()

    init {
        // 将当前实例设置为系统默认的异常处理器
        Thread.setDefaultUncaughtExceptionHandler(this)
    }

    /**
     * 当UncaughtException发生时会转入该函数来处理
     */
    override fun uncaughtException(thread: Thread, ex: Throwable) {
        // 使用 XLog 记录异常信息
        logException(ex)

        // 如果系统提供了默认的异常处理器，则交给它来处理，否则自己处理
        if (defaultHandler != null) {
            defaultHandler.uncaughtException(thread, ex)
        } else {
            // 退出程序
            android.os.Process.killProcess(android.os.Process.myPid())
            exitProcess(1)
        }
    }

    /**
     * 记录异常信息
     * @param ex 异常
     */
    private fun logException(ex: Throwable) {
        val sw = StringWriter()
        val pw = PrintWriter(sw)
        ex.printStackTrace(pw)

        // 使用 XLog 将完整的堆栈跟踪信息记录到文件中
        XLog.e("!!!!!!!!!!!!!!!!!! UNCAUGHT EXCEPTION !!!!!!!!!!!!!!!!!!", ex)
    }
}